#include <iostream>
#include <cstring>
#include <ctime>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;

int main()
{
    signal(17,SIG_IGN);
    //srand(time(nullptr));
    //signal(17,handler);
    for(int i=0;i<0;i++)
    {
        pid_t id = fork();
        if(id==0)
        {
            while(true)
            {
                cout << "I am child process: " << getpid() << ",ppid: " << getppid() << endl;
                sleep(5);
                break;
            }
            cout << "child quit!" << endl;
            //sleep(rand()%5+3);
            exit(0);
        }
        sleep(1);
    }
        //father
        while(true)
        {
            cout << "I am father process: " << getpid() << endl;
             sleep(1);
        }

    return 0;
}

//volatile int flag = 0;

// void handler(int signo)
// {
//     cout << "catch a signal: " << signo << endl;
//     flag = 1;
// }

// int main()
// {
//     signal(2,handler);
//     //优化条件下，flag变量可能优化到CPU寄存器中
//     while(!flag);

//     cout << "process quit normal" << endl;
//     return 0;
// }

// void PrintPending()
// {
//     sigset_t set;
//     sigpending(&set);

//     for(int signo = 1;signo <=31;sigho++)
//     {
//         if(sigismember(&set,signo))
//             cout << "1";
//         else
//             cout << "0";
//     }
//     cout << "\n";
// }

// void handler(int signo)
// {
//     cout << "catch a signal, signal number : " << signo << endl;
//     while(true)
//     {
//         PrintPending();
//         sleep(1);
//     }
// }

// int main()
// {
//     struct sigaction act,oact;
//     memset(&act,0,sizeof(act));
//     memset(&act,0,sizeof(oact));

//     sigemptyset(&act.sa_mask);
//     sigaddset(&act.sa_mask,1);
//     sigaddset(&act.sa_mask,3);
//     sigaddset(&act.sa_mask,4);
//     act.__sigaction_handler = handler;
//     sigaction(2,&act,&oact);

//     while(true)
//     {
//         cout << "I am a process: " << getpid() << endl;
//         sleep(1);
//     }
//     return 0;
    
// }